import Vue from 'vue'

function getCurrentDate() {
  let date = new Date()
  return `${date.getFullYear()}-${date.getMonth() +
    1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`
}
//强制保留2位小数，如：2，会在2后面补上00.即2.00
function toDecimal2(x) {
  let f = parseFloat(x)
  if (isNaN(f)) {
    return false
  }
  f = Math.round(x * 100) / 100
  let s = f.toString()
  let rs = s.indexOf('.')
  if (rs < 0) {
    rs = s.length
    s += '.'
  }
  while (s.length <= rs + 2) {
    s += '0'
  }
  return s
}
function routerLinkTo(link, num) {
  if (link && num == 1) {
    link = link.toString()
    this.$router.resolve(link)
  } else {
    this.$router.push(link)
  }
}

function checkEmail(str) {
  let re = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/
  if (re.test(str)) {
    return true
  } else {
    return false
  }
}
// 函数防抖
//在事件被触发n秒后再执行回调，如果在这n秒内又被触发，则重新计时。
function debounce(fun, delay) {
  console.log(fun, delay)

  return function(args) {
    let that = this
    let _args = args
    clearTimeout(fun.id)
    fun.id = setTimeout(function() {
      fun.call(that, _args)
    }, delay)
  }
}

//函数节流
//规定在一个单位时间内，只能触发一次函数。如果这个单位时间内触发多次函数，只有一次生效。
function throttle(fun, delay) {
  console.log(fun, delay)

  let last, deferTimer
  return function(args) {
    let that = this
    let _args = arguments
    let now = +new Date()
    if (last && now < last + delay) {
      clearTimeout(deferTimer)
      deferTimer = setTimeout(function() {
        last = now
        fun.apply(that, _args)
      }, delay)
    } else {
      last = now
      fun.apply(that, _args)
    }
  }
}

export default {
  toDecimal2,
  routerLinkTo,
  checkEmail,
  debounce,
  getCurrentDate,
  debounce,
  throttle,
  // Vue.js的插件应当有一个公开方法 install。这个方法的第一个参数是 Vue 构造器，第二个参数是一个可选的选项对象。
  install: function(Vue) {
    Vue.prototype.$debounce = debounce
    Vue.prototype.$throttle = throttle
  },
}
